package com.openlogic.flow.service;

import java.io.IOException;
import java.util.List;

import org.dromara.warm.flow.orm.entity.FlowDefinition;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.UploadedFile;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.openlogic.common.core.web.domain.PageData;
import com.openlogic.flow.domain.query.FlowDefinitionQuery;
import com.openlogic.flow.domain.vo.FlowDefinitionVo;

/**
 * @ClassName: OpenLogicFlowDefinitionServcie
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author weiyongpeng
 * @date 2025年2月10日 下午7:54:59
 */
public interface IFlowDefinitionServcie extends IService<FlowDefinition>{

	/**
	 * 描述：查询流程定义列表
	 * @Title: queryList
	 * @param flowDefinition
	 * @param pageQuery
	 * @return
	 * @author weiyongpeng
	 * @date 2025年2月10日 下午7:55:07
	 */
	List<FlowDefinitionVo> queryList(FlowDefinition flowDefinition);

	/**
	 * 描述：查询未发布的流程定义列表
	 * @Title: unPublishList
	 * @param flowDefinition
	 * @param pageQuery
	 * @return
	 * @author weiyongpeng
	 * @date 2025年2月10日 下午7:55:19
	 */
	PageData<FlowDefinitionVo> unPublishList(FlowDefinition flowDefinition, Page<FlowDefinitionQuery> pageQuery);

	/**
	 * 描述：发布流程定义
	 * @Title: publish
	 * @param id
	 * @return
	 * @author weiyongpeng
	 * @date 2025年2月10日 下午7:55:29
	 */
	boolean publish(Long id);

	/**
	 * 描述：导出流程定义
	 * @Title: exportDef
	 * @param id
	 * @param ctx
	 * @throws IOException
	 * @author weiyongpeng
	 * @date 2025年2月10日 下午7:55:39
	 */
	void exportDef(Long id, Context ctx) throws IOException;

	/**
	 * 描述：导入流程定义
	 * @Title: importJson
	 * @param file
	 * @param category
	 * @return
	 * @author weiyongpeng
	 * @date 2025年2月10日 下午7:55:47
	 */
	boolean importJson(UploadedFile file, String category);

	/**
	 * 描述：删除流程定义
	 * @Title: removeDef
	 * @param ids
	 * @return
	 * @author weiyongpeng
	 * @date 2025年2月10日 下午7:55:56
	 */
	boolean removeDef(List<Long> ids);

	/**
	 * 描述：新增租户流程定义
	 * @Title: syncDef
	 * @param tenantId
	 * @author weiyongpeng
	 * @date 2025年2月10日 下午7:56:09
	 */
	void syncDef(String tenantId);
}
